import axios from 'axios'
import { useUserStore } from '@/stores'
// 导入 elements-ui中的弹框
import { ElMessage } from 'element-plus'
// 导入router
import router from '@/router'
// 1. 创建axios实例
// 2. 设置基础地址
// 3. 设置请求头携带token
// 4. 摘取核心响应数据
const baseURL = 'http://big-event-vue-api-t.itheima.net'

const instance = axios.create({
  // 1. 基础地址,超时时间
  baseURL, // 2. 设置基础地址
  timeout: 10000, // 3. 设置超时时间
  // headers: {
  //   'Content-Type': 'application/json;charset=UTF-8',
  // },
})

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 2. 携带token 我们将仓库的token信息导入进来
    const userStore = useUserStore()
    if (userStore.token) {
      config.headers.Authorization = userStore.token
    }
    return config
  },
  (err) => Promise.reject(err),
)
// 响应拦截器
instance.interceptors.response.use(
  (res) => {
    // 4. 摘取核心响应数据 如果code为0 表示请求成功 正常返回即可
    if (res.data.code === 0) return res
    // 3.处理业务失败 给错误提示 抛出错误
    ElMessage.error(res.data.message || '服务异常')
    // 5. 错误的特殊情况——处理401错误 401=>权限不足 或者 token过期 跳转至登录页
    if (res.data.code === 401) router.push('/login')
    // 错误的默认情况
    return Promise.reject(res.data)
  },
  (err) => {
    // 5. 错误的特殊情况——处理401错误 401=>权限不足 或者 token过期 跳转至登录页
    if (err.response?.status === 401) router.push('/login')
    // 错误的默认情况
    ElMessage.error(err.response.data.message || '服务异常')
    return Promise.reject(err)
  },
)

export default instance // 导出axios实例
export { baseURL }
